#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>
#include <string.h>
#include <unistd.h>
#include "kernel_list.h"
typedef struct node
{
    int data;
    struct list_head list;
}queue;
//初始化
queue * queue_init(void)
{
    queue *q=malloc(sizeof(queue));
    if(q!=NULL)
    {
        INIT_LIST_HEAD(&q->list);
    }
    return q;
}
//产生新节点
queue * new_node(int data)
{
    queue *new=malloc(sizeof(queue));
    if(new!=NULL)
    {
        INIT_LIST_HEAD(&new->list);
        new->data=data;
    }
    return new;
}
//入队
void en_queue(queue *new, queue *q)
{
    list_add_tail(&new->list,&q->list);

}
bool is_empty(queue *q)
{
    return q->list.next==&q->list;
}
queue * out_queue(queue *q)
{
    if(is_empty(q))
        return NULL;
    queue *temp=list_entry(q->list.next,queue,list);
    list_del(q->list.next);
    return temp;
}
int main(int argc, char const *argv[])
{
    queue *q=queue_init();
    for(int i=1;i<=5;i++)
    {
        en_queue(new_node(i),q);
    }
    while(!is_empty(q))
    {
        queue *temp=out_queue(q);
        printf("%d\t",temp->data);
        free(temp);
    }
    return 0;
}
